#pragma once



// 类外的结构体 structByExternalClass
typedef struct structByExternalClass {
	int sa;
	int sb;
};

class test04_Struct
{
	// 类中定义结构体，作用域为本类
	// 类外定义结构体，作用域会扩大，为全局命名空间内
	typedef struct structTe {
		int a;
		int b;
	};


	/////////////////////// 自定义out
	//template <class T>
	//struct out {
	//	std::function<void(T)> target;
	//
	//	out(T* t)
	//		: target([t](T&& in) {
	//		if (t) *t = std::move(in);
	//			}) {}
	//
	//			template <class... Args>
	//			void emplace(Args&&... args) {
	//				target(T(std::forward<Args>(args)...));
	//			}
	//
	//			template <class X>
	//			void operator=(X&& x) {
	//				emplace(std::forward<X>(x));
	//			}
	//
	//			template <class... Args>
	//			void operator()(Args&&... args) {
	//				emplace(std::forward<Args>(args)...);
	//			}
	//};
	//
	/////////////////////// 自定义out


public:
	void clsMain();
	void structTeOfFunction(structTe x);
	void structTePointOfFun(const structTe* x);
	structTe functionRequestStruct();
	void useExternalClassStruct(structByExternalClass* sbP);

	//void divide(int dividend, int divisor, out<int>& quotient_out, out<int>& remainder_out);



};
